<?php

/**
 * Represents a composite field group, which may contain other groups
 */
abstract class UserFormsCompositeField extends CompositeField implements UserFormsFieldContainer {

	/**
	 * Parent field
	 *
	 * @var UserFormsFieldContainer
	 */
	protected $parent = null;

	public function getParent() {
		return $this->parent;
	}

	public function setParent(UserFormsFieldContainer $parent) {
		$this->parent = $parent;
		return $this;
	}

	public function processNext(EditableFormField $field) {
		// When we find a step, bubble up to the top
		if($field instanceof EditableFormStep) {
			return $this->getParent()->processNext($field);
		}

		// Skip over fields that don't generate formfields
		$formField = $field->getFormField();
		if(!$formField) {
			return $this;
		}

		// Save this field
		$this->push($formField);

		// Nest fields that are containers
		if($formField instanceof UserFormsFieldContainer) {
			return $formField->setParent($this);
		}

		// Add any subsequent fields to this
		return $this;
	}
}
